package config

import (
	"data-process/logger"
	json2 "encoding/json"
	"io/ioutil"
	"os"
	"strings"
)

var SysConfig Config

// Config 配置信息
type Config struct {
	Storage Storage `json:"storage"`
	Produce Produce `json:"produce"` // 数据模型
	Size    int     `json:"size"`    // 数据量
}

// Produce 模型信息
type Produce struct {
	Type     string                 `json:"type"`
	Model    map[string]interface{} `json:"model"`
	Database DBConfig               `json:"database"`
}

type DBConfig struct {
	Ip       string `json:"ip"`
	Port     int    `json:"port"`
	Db       string `json:"db"`
	Username string `json:"username"`
	Password string `json:"password"`
	Sql      string `json:"sql"`
	Driver   string `json:"driver"`
}

// Storage 存储配置信息
type Storage struct {
	Type string      `json:"type"` // 存储类型
	File FileStorage `json:"file"` // 文件存储类型配置
	Db   DbStorage   `json:"db"`   // 数据库存储类型配置
}

type FileStorage struct {
	Path string `json:"path"` // 存储路径
	Name string `json:"name"` // 文件名称
}

type DbStorage struct {
}

// ConfigPath 默认的配置文件路由
const ConfigPath = "./config/config-db.json"

// parse 解析参数
func parse(args []string) string {
	if len(args) > 1 {
		argArr := strings.Split(os.Args[1], "=")
		if len(argArr) == 2 && argArr[0] == "--config" {
			return argArr[1]
		}
	}
	return ""
}

func InitConfig(args []string) {
	assignConfig := parse(args)
	var configPath string
	if assignConfig != "" {
		configPath = assignConfig
	} else {
		configPath = ConfigPath
	}
	var config Config
	data, err := ioutil.ReadFile(configPath)
	if err != nil {
		logger.Fatal("读取配置文件失败")
		return
	}
	err = json2.Unmarshal(data, &config)
	if err != nil {
		logger.Fatal("解析配置信息失败")
		return
	}
	SysConfig = config
}
